#pragma once

#include "parameter.h"

void *video_func(void *args)
{
    pthread_detach(pthread_self());
    char *msg = (char *)args;
    printf("%s\n", msg);

    int ret_val;
    // 创建用于发送控制指令的管道文件
    if (access(FIFO_PATH, F_OK)) // 判断管道文件是否已存在
    {
        ret_val = mkfifo(FIFO_PATH, 0666);
        if (ret_val < 0)
        {
            perror("mkfifo error");
        }
        printf("管道文件创建成功\n");
    }

    // 直接使用 popen 来播放音视频
    FILE *fp = popen("mplayer  2.mp4 -quiet -slave -geometry 0:0 -zoom -x 800 -y 400 -input file=/tmp/myFifo &", "r");
    if (fp == NULL)
    {
        perror("popen error");
    }

    printf("视频正在播放....\n");

    // 打开用于发送指令的管道文件
    int fd_fifo = openfd(FIFO_PATH, O_RDWR);

    //  打开LCD屏
    int lcd_fd = openfd("/dev/fb0", O_RDWR);


    // 3.申请映射内存
    int *lcd_p = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, lcd_fd, 0);
    if (lcd_p == NULL)
        perror("mmap error");

    //刷一遍屏
    //
    for (int y = 400; y < 480; y++)
    {
        for (int x = 0; x < 800; x++)
        {
            *(lcd_p + (800 * y + x)) = 0x00ffffff;
        }
    }

    // 打开触摸屏
    int ts_fd = openfd("/dev/input/event0", O_RDONLY);

    //触摸屏参数
    struct input_event touch;
    int x = 0, y = 0;
    int run_flag = 0;   //控制打印

    show_bt_bmp("slow.bmp", lcd_fd, 260, 405);
    show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
    show_bt_bmp("termination.bmp", lcd_fd, 400, 405);
    show_bt_bmp("speed.bmp", lcd_fd, 470, 405);

    while (1)
    {
        // 触摸选择
        read(ts_fd, &touch, sizeof(touch)); // 没触摸的时候。read是堵塞的
        if (touch.type == EV_ABS && touch.code == ABS_X)
            x = touch.value * 800 / 1024; // 判断是不是触摸屏设备，在判断是不是x坐标，
        if (touch.type == EV_ABS && touch.code == ABS_Y)
            y = touch.value * 480 / 600;
        if (touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0) // 判断是否手离开
        {
            if (x >= 260 && x <= 330 && y >= 405)   //后退秒
            {
                send_cmd(fd_fifo, "seek -3\n");
            }
            else if (x >= 330 && x <= 400 && y >= 405 && run_flag == 0)     //暂停
            {
                send_cmd(fd_fifo, "pause\n");
                show_bt_bmp("play.bmp", lcd_fd, 330, 405);
                run_flag = 1;
            }
            else if (x >= 330 && x <= 400 && y >= 405 && run_flag == 1)     //播放
            {
                send_cmd(fd_fifo, "pause\n");
                show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
                run_flag = 0;
            }
            else if (x >= 400 && x <= 470 && y >= 405)      //退出
            {

                send_cmd(fd_fifo, "quit\n");
                sleep(1);
                // 先刷一遍屏幕
                for (int y = 0; y < 480; y++)
                {
                    for (int x = 0; x < 800; x++)
                    {
                        *(lcd_p + (800 * y + x)) = 0x0000A2E8;
                    }
                }
                close(lcd_fd);
                close(ts_fd);
                munmap(lcd_p, 800 * 400 * 4);
                flag = MENU;
                break;
            }
            else if (x >= 470 && x <= 530 && y >= 405)      //快进
            {
                send_cmd(fd_fifo, "seek +3\n");
            }
        }
    }
}